package code13.map;

import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

import org.junit.Test;

public class Test03 {
	@Test
	public void f1() {
		// Property集合
		Properties p = new Properties();
		// 一般不会这样使用
		//p.put("1", 123);
		//p.get("1");
		
		// 设置 Property 和其值, 参数都是 String
		p.setProperty("name", "tom");
		p.setProperty("age", "20");
		//p.setProperty("sex", "男");
		
		// 获取指定属性的值
		String name = p.getProperty("name");
		System.out.println("name:"+name);
		// 如果对应的属性不存在，则返回 defaultValue 对应的值. 相当于设置某个属性的默认值
		String sex = p.getProperty("sex", "女");
		System.out.println(sex);
		
		// 遍历
		//Set<Object> keySet = p.keySet();
		//Collection<Object> values = p.values();
		//Set<Entry<Object,Object>> entrySet = p.entrySet();
		// Enumeration
		//Enumeration<Object> keys = p.keys();
		//Enumeration<Object> elements = p.elements();
		
		// 遍历
		Set<String> propertyNames = p.stringPropertyNames();
		for (String pName : propertyNames) {
			String value = p.getProperty(pName);
			System.out.println(pName + "=" + value);
		}
	}
	@Test
	public void f2(){
		// 通过 Properties 加载 properties 文件中内容
		Properties p = new Properties();
		
		// 加载属性文件, 固定写法
		try {
			// 默认使用 ISO-8859-1
			p.load(
				Test03.class // 获取当前类的Class对象
				.getClassLoader() // 获取当类的加载器, 用于加载类路径下的资源, 一般是 src(编译后) 目录下内容
				.getResourceAsStream("a.properties") // 加载类路径下的指定资源, 参数是 资源 相对 src (编译后的目录) 的地址
				);
			System.out.println(p);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	@Test
	public void f3(){
		Properties p = new Properties();
		// 加载属性文件, 固定写法
		try {
			// 默认使用 ISO-8859-1
			// b.properties 是 UTF-8
			p.load(
				Test03.class
				.getClassLoader()
				.getResourceAsStream("b.properties")
				);
			System.out.println(p);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
}
